package com.ht.api.task;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.sql.DataSource;

import com.ht.api.db.Db;
import com.ht.api.db.DbConfig;
import com.ht.api.db.DbList;
import com.ht.api.db.Entity;
import com.ht.api.db.StreamLoadConfig;
import com.ht.api.db.task.HtTaskExecutor;
import com.ht.api.db.task.TaskHandler;

import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;

/**
 * 维护加入群聊表中qr_code_chat_status状态
 * @author asq
 * @createTime 2025年3月25日 17:30:02
 */
@Slf4j
public class JoinWayStatusTask implements TaskHandler {

	@Override
	public String getName() {
		return "维护加入群聊的目标群二维码状态";
	}

	@Override
	public boolean handler(JSONObject requestParam, String groupId, long taskId) {
		DbList list = Db.createSqlParser("sys_tenant").query();
		list.stream().forEach(b -> {
			HtTaskExecutor.execute(() -> {
				long tenantId = b.getLong("main_id");
				log.info("[JoinWayStatusTask]更新加入郡聊的目标群二维码状态开始，租户ID：{}", tenantId);
				updateJoinWayStatus(tenantId);
				log.info("[JoinWayStatusTask]更新加入郡聊的目标群二维码状态结束，租户ID：{}", tenantId);
			});
		});
		
		return true;
	}
	
	/**
	 * 更新加入群聊的目标群二维码状态
	 * @param tenantId
	 */
	private void updateJoinWayStatus(long tenantId) {
		DataSource ds = DbConfig.useTenantDb(tenantId);
		StreamLoadConfig streamLoadConfig = DbConfig.useTenantSLC(tenantId);
		
		List<Entity> list = new ArrayList<>();
		DbList wxJoinWayList = Db.createSqlParser("wx_join_way")
				.where("qr_code_chat", "is not", null)
				.where("qr_code_chat", "!=", "")
				.where("qr_code_chat_status", "!=", 2)
				.query(ds);
		wxJoinWayList.stream().forEach(bean -> {
			String time = bean.getStr("qr_code_chat_time");
			if (time != null) {
				long days = DateUtil.betweenDay(DateUtil.parseDateTime(time), new Date(), false);
				if (days <= 0) {
					bean.set("qr_code_chat_status", 2);
					log.info("[JoinWayStatusTask]加入郡聊的目标群二维码已失效，config_id：{}", bean.getStr("config_id"));
					list.add(bean);
				} else if (days < 2) {
					bean.set("qr_code_chat_status", 1);
					log.info("[JoinWayStatusTask]加入郡聊的目标群二维码即将失败，config_id：{}", bean.getStr("config_id"));
					list.add(bean);
				}
			}
		});
		
		Db.insertBatchWithStream(streamLoadConfig, list);
	}

}
